草庐IT

c++ - OpenCV C++ 多线程

全部标签

c# - BinaryFormatter 序列化和反序列化线程安全吗?

引用this回答一个问题。这可以重写为:privatestaticBinaryFormatterformatter=newBinaryFormatter();publicstaticTDeepClone(thisTa){using(MemoryStreamstream=newMemoryStream()){formatter.Serialize(stream,a);stream.Position=0;return(T)formatter.Deserialize(stream);}}所以避免为每次调用构造(和GC'ing)一个新的BinaryFormatter?此代码路径经常受到攻击,因

c# - .NET Web 服务和 BackgroundWorker 线程

我正在尝试在网络服务方法中执行一些异步操作。假设我有以下API调用:http://www.example.com/api.asmx并且该方法称为GetProducts()。在这个GetProducts方法中,我做了一些事情(例如,从数据库中获取数据),然后在我返回结果之前,我想做一些异步事情(例如,给我发一封电子邮件)。这就是我所做的。[WebMethod(Description="Balblahblah.")]publicIListGetProducts(){//Blahblahblah..//GetdatafromDB..hiDB!//varmyData=.......//Moar

c# - 线程同步。 lock 究竟是如何访问内存 'correct' 的?

首先,我知道lock{}是Monitor类的合成糖。(哦,句法糖)我正在处理简单的多线程问题,发现不能完全理解锁定内存的任意字如何保护整个其他内存不被缓存是寄存器/CPU缓存等。使用代码示例来解释我在说什么更容易关于:for(inti=0;i最后ms_Sum将包含100000000,这当然是预期的。现在我们准备在2个不同的线程上执行相同的循环,并且上限减半。for(inti=0;i由于没有同步,我们得到不正确的结果-在我的4核机器上它是随机数接近52388219这略大于100000000的一半.如果我们将ms_Sum+=1;包含在lock{}中,我们当然会得到绝对正确的结果100000

c# - Dispatcher线程和UI线程有什么区别

UI线程和Dispatcher线程在WPF中是一样的还是有什么区别? 最佳答案 ADispatcher负责管理线程的工作。UI线程是渲染UI的线程。TheUIthreadqueuesworkitemsinsideanobjectcalledaDispatcher.TheDispatcherselectsworkitemsonaprioritybasisandrunseachonetocompletion.EveryUIthreadmusthaveatleastoneDispatcher,andeachDispatchercanexe

c# - 使用/不使用 delegate() 启动线程

有什么区别:newThread(newThreadStart(SomeFunc))和:newThread(delegate(){SomeFunc();})这段代码在我的电脑上给出了奇怪的输出:publicclassA{intNum;publicA(intnum){Num=num;}publicvoidDoObj(objectobj){Console.Write(Num);}publicvoidDo(){Console.Write(Num);}}///////invoidmain()for(inti=0;i如果只执行第1行,输出类似于:0231564789没问题,但如果执行第2行或第3行

c# - 如果另一个线程正在执行它,则退出该方法

我在多线程应用程序中有一个方法,我希望调用此方法时出现以下行为:如果当前没有其他线程正在执行该方法,则执行它。如果另一个线程当前正在执行该方法,则退出该方法而不执行它。C#中的lock语句对于等待线程完成执行很有用,但我不想序列化对此方法的访问,而是绕过执行所述方法(如果它正在被执行)另一个线程。 最佳答案 您可以使用Monitor.TryEnter执行此操作,但也许更简单:互锁:intexecuting;//makethisstaticifyouwantthisone-caller-onlyto//allobjectsinstea

c# - 如何并行运行两个线程?

我通过单击按钮启动两个线程,每个线程调用一个单独的例程,每个例程将打印线程名称和i的值。程序运行完美,但我看到Thread1()函数先运行,然后Thread2()例程开始,但我尝试运行Thread1()和Thread2()都是并行的。我哪里出错了?privatevoidbutton1_Click(objectsender,EventArgse){Threadtid1=newThread(newThreadStart(Thread1));Threadtid2=newThread(newThreadStart(Thread2));tid1.Start();tid2.Start();Mess

c# - 如何在 C# 中执行线程安全函数内存?

此处堆栈溢出found内存单参数函数的代码:staticFuncMemoize(thisFuncf){vard=newDictionary();returna=>{Rr;if(!d.TryGetValue(a,outr)){r=f(a);d.Add(a,r);}returnr;};}虽然这段代码为我完成了它的工作,但当同时从多个线程调用内存函数时,它有时会失败:Add方法使用相同的参数被调用两次并抛出异常。如何使内存线程安全? 最佳答案 您可以使用ConcurrentDictionary.GetOrAdd它做你需要的一切:stati

c# - 从线程向主线程发送异常?

我想将当前线程(该线程不是主线程)的异常传递给主线程。为什么?因为我在另一个线程中检查我的硬锁(该线程使用计时器进行检查),当HardLock不可访问或无效时,我创建了一个由我自己定义的异常,然后抛出该异常。所以那个异常(exception)不能很好地工作。;( 最佳答案 最好的办法是将Thread替换为Task(.NET4.0中的新功能)。Task类处理将异常正确编码到任何检查任务结果的线程。如果无法使用.NET4.0,则Rxextensions中的CoreEx.dll包含一个Exception.PrepareForRethrow

c# - 如何正确关闭已创建多个线程的 C# 应用程序?

我正在编写一个GUI应用程序。应用程序在其生命周期内打开了多个线程。其中一个线程正在处理可能来自其他应用程序的事件,因此它在while(true)循环中等待永远不会终止的事件。用户可以随时关闭应用程序。我想关闭主应用程序打开的所有线程。我正在使用Process.GetCurrentProcess().Kill();暂时解决这个问题。这是一个好的解决方案吗?如果不是,为什么以及处理这个问题的正确方法是什么,如何关闭主应用程序打开的所有线程? 最佳答案 如果您将新线程创建为后台线程(通过在启动它们之前设置IsBackground),它们